// https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

import { weach } from '@/gql/user';
import { toPublish } from '@mqtt';
import wx from 'weixin-js-sdk';

function configHandler(obj: any) {
  const { jssdk } = obj.data;
  wx.config({
    debug: false,
    appId: jssdk.appId,
    timestamp: jssdk.timestamp,
    nonceStr: jssdk.nonceStr,
    signature: jssdk.signature,
    jsApiList: [
      'updateAppMessageShareData',
      'updateTimelineShareData',
      'openLocation',
      'getLocation',
      'scanQRCode',
      'chooseWXPay',
      'openAddress',
    ],
	openTagList:['wx-open-launch-weapp']
  });
}

function toConfig() {
  const url = encodeURIComponent(location.origin + location.pathname);
  const payload = {
    query: weach,
    variables: { url },
  };
  toPublish('ql/driver/jssdk', payload, configHandler);
}

function onReady(callback) {
  wx.ready(callback);
}

function defaultFail(api, callback = () => {}) {
  return (res) => {
    const warnMsg = `%cWeChat JSSDK ${api} fail: `;
    console.warn(warnMsg, 'color:green;background:yellow');
    console.error(res);
    callback();
  };
}

// 3 分享接口
// 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
// 自定义“分享到朋友圈”及“分享到 QQ 空间”按钮的分享内容
function toShare(data, success) {
  const shareData = {
    title: data.title,
    desc: data.desc,
    link: data.path,
    imgUrl: data.image,
    success,
  };
  wx.updateAppMessageShareData(shareData);
  wx.updateTimelineShareData(shareData);
}
// 4 图像接口
// 拍照或从手机相册中选图接口
function chooseImage(success) {
  wx.chooseImage({
    count: 1,
    sizeType: ['compressed'],
    sourceType: ['album'],
    success,
  });
}
// 8 地理位置
// 使用微信内置地图查看位置接口
function openLocation({ latitude, longitude }) {
  wx.openLocation({ latitude, longitude });
}
// 获取地理位置接口
function getLocation(success, fail = defaultFail('getLocation')) {
  wx.getLocation({
    type: 'gcj02', // 默认为wgs84的 gps 坐标，如果要返回直接给 openLocation 用的火星坐标，可传入'gcj02'
    success,
    fail,
  });
}
// 11 微信扫一扫
// 调起微信扫一扫接口
function scanQRCode(success, fail = defaultFail('scanQRCode')) {
  wx.scanQRCode({
    needResult: 1, // 默认为0，扫描结果由微信处理，1则直接返回扫描结果，
    scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码，默认二者都有
    success,
    fail,
  });
}
// 14 微信支付
// 发起一个微信支付请求
function chooseWXPay(data, success, fail = defaultFail('chooseWXPay')) {
  wx.chooseWXPay({
    timestamp: data.timeStamp, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
    nonceStr: data.nonceStr, // 支付签名随机串，不长于 32 位
    package: data.package, // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=\*\*\*）
    signType: data.signType, // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
    paySign: data.paySign, // 支付签名
    success,
    fail,
  });
}
// 15 快速输入
// 共享收货地址接口
function openAddress(success, fail = defaultFail('openAddress')) {
  wx.openAddress({ success, fail });
}

export {
  toConfig,
  onReady,
  defaultFail,
  toShare,
  chooseImage,
  openLocation,
  getLocation,
  scanQRCode,
  chooseWXPay,
  openAddress,
};
